# """
# try  expect else finally  raise
# 有try必须有expect
# Exception是所有异常类的父类
# """
# try:
#     print("xxxxx")
#     # 怀疑可能发生异常的代码
#     try:
#         open("xxx")
#         # res =1/0
#         # print(name)
#         print(123)
#     # 捕获到指定异常要进行的处理
#     except (NameError,ZeroDivisionError) as msg:
#         print(f"报错了:{msg}")
#     except FileNotFoundError:
#         print("文件不存在,进行处理")
#         raise
#     # 如果try里面没有出现异常要触发的代码
#     else:
#         print("没报错,好开心")
#     # 无论有没有报错都会触发的代码:
#     finally:
#         print("我是报不报错都执行的代码")
# # 捕获所有异常
# except Exception as msg:
#     print(f"报错了:{msg}")
#
#
#
# # def fun():
# #     # 怀疑可能发生异常的代码
# #     try:
# #         # open("xxx")
# #         # res =1/0
# #         # print(name)
# #         print(123)
# #         return
# #     # 捕获到指定异常要进行的处理
# #     except (NameError, ZeroDivisionError) as msg:
# #         print(f"报错了:{msg}")
# #     except FileNotFoundError:
# #         print("文件不存在")
# #     # 无论有没有报错都会触发的代码:
# #     finally:
# #         print("我是报不报错都执行的代码")
# #
# # fun()
#
# # 主动抛出异常
# # raise NameError
"""
自定义报错:
1.继承Exception位父类
2. 需要有__str__魔法方法
"""

class ShotInputError(Exception):
    def __str__(self):
        return "您输入的密码长度不对"

"""
密码的长度需要大于3位
"""
def fun():
    # 用户输入密码
    sec = input("请您输入密码:")
    # 如果密码长度小于等于3位提示报错
    if len(sec)<=3:
        raise ShotInputError
    else:
        print("密码输入成功")

fun()
print("后续代码")